package maskWork;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;

public class Master {

	//1、有一个呈装任务的集合
	private ConcurrentLinkedQueue<Task> jobQueue = new ConcurrentLinkedQueue<>();
	
	//2、使用hashmap装载work对象
	private Map<String, Thread> works = new HashMap<>();
	
	//3、使用一个容器呈装work的结果集
	private ConcurrentHashMap<String, Object> resultMap = new ConcurrentHashMap<>();
	
	
	//4、构造方法
	public Master(Work work,int workCount){
		
		//工作集合,引用当前的
		work.setWorkQueue(this.jobQueue);
		
		//结果集合
		work.setResultMap(this.resultMap);
		
		
		for (int i = 0; i < workCount; i++) {
			//key是每个work的名字 ，value是线程对象
			works.put("节点"+i, new Thread(work));
			
		}
	}
	
	//5、提交任务
	public void submit(Task task){
		this.jobQueue.add(task);
	}
	
	 
	//6、执行的方法，启动应用程序，让所有的work工作
	public void workAll(){
		for (Entry<String, Thread> mp : works.entrySet()) {
			mp.getValue().start();
		}
	}
	
	
	//7、是否完成
	public boolean isComplete(){
		for (Entry<String, Thread> mp : works.entrySet()) {
			if(mp.getValue().getState() != Thread.State.TERMINATED){
				return false;
			}
		}
		return true;
	}
	
	
	//8、返回结果集
	public int getResult(){
		int result = 0;
		for (Entry<String, Object> resultMap : resultMap.entrySet()) {
			Object r = resultMap.getValue();
			result += (int)r;
		}
		return result;
	}
	
	
}
